package com.javafactroy.kunlong.base.metadata.valueobj;

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class MetadataField {

    protected String propName;
    protected String propType;
    protected String jdbcType;

    protected String colName;
    protected String colType;
    protected String colKey;
    protected String dataType;
    protected String comment;

    protected Long maxLength;

    public Boolean pkey(){
         return colKey.equals("PRI");
    }

    public String dataType2PropType() {
        if ("bit".equals(dataType)) {
            return "Boolean";
        } else if ("decimal".equals(dataType)) {
            return "BigDecimal";
        } else if ("numeric".equals(dataType)) {
            return "BigDecimal";
        } else if (dataType.equals("bigint")) {
            return "Long";
        } else if (dataType.equals("int")) {
            return "Integer";
        } else if (dataType.equals("tinyint")) {
            return "Boolean";
        } else if (dataType.equals("varchar")) {
            return "String";
        } else if (dataType.equals("longvarchar")) {
            return "String";
        } else if (dataType.equals("timestamp")) {
            return "Date";
        } else if (dataType.equals("datetime")) {
            return "Date";
        } else if (dataType.equals("date")) {
            return "Date";
        } else if (dataType.equals("binary")) {
            return "byte[]";
        } else if (dataType.equals("clob")) {
            return "Clob";
        } else if (dataType.equals("blob")) {
            return "Blob";
        }

        return "String";
    }

    public String datatype2JdbcType() {

        if (dataType.equals("bigint")) {
            return "BIGINT";
        } else if (dataType.equals("varchar")) {
            return "VARCHAR";
        } else if (dataType.equals("longvarchar")) {
            return "LONGVARCHAR";
        } else if (dataType.equals("bit")) {
            return "BIT";
        } else if (dataType.equals("tinyint")) {
            return "BOOLEAN";
        } else if (dataType.equals("clob")) {
            return "CLOB";
        } else if (dataType.equals("blob")) {
            return "BLOB";
        } else if (dataType.equals("binary")) {
            return "BINARY";
        } else if (dataType.equals("date")) {
            return "DATE";
        } else if (dataType.equals("datetime")) {
            return "TIMESTAMP";
        } else if (dataType.equals("timestamp")) {
            return "TIMESTAMP";
        } else if (dataType.equals("int")) {
            return "INTEGER";
        } else if (dataType.equals("decimal")) {
            return "DECIMAL";
        } else if (dataType.equals("numeric")) {
            return "NUMERIC";
        }

        return "VARCHAR";
    }

    public String dataType2PropTypePostgres() {
        if ("int4".equals(dataType)) {
            return "Integer";
        }
        if ("int8".equals(dataType)) {
            return "Long";
        }
        if ("bool".equals(dataType)) {
            return "Boolean";
        }
        return dataType2PropType();
    }


    public String datatype2JdbcTypePostgres() {

        if ("int4".equals(dataType)) {
            return "INTEGER";
        }
        if ("int8".equals(dataType)) {
            return "BIGINT";
        }
        if ("bool".equals(dataType)) {
            return "BOOLEAN";
        }

        return datatype2JdbcType();
    }


}
